1. App的生命週期與viewController生命週期
2. 記憶體管理(Auto Reference Counting)
3. Closure
4. Multi-threads
5. OperationQueue
6. Grand Central Dispatch (GCD)
App的生命週期和ViewController的生命週期是當app狀態改變(退到背景,重新啟動)和頁面顯示或頁面消失(進到下一頁或回到前一頁)時,我們需要在這些生命週期的function去做一些該做的事,以維持app的狀態,來符合使用者的期望。
要注意的是App的生命週期和ViewController的生命週期的function皆為system callback,我們無法或不應該去主動呼叫這些function,由系統控制何時該執行到這些function,我們只要專注要在這些function中要做的事。
App的生命週期 (p.s 在AppDelegate中去控制)
didFinishLaunchingWithOptions --- app運作的起始點,可以在這裡把navigationController設為基底
applicationWillEnterForeground --- app從背景到前景
applicationDidBecomeActive
applicationWillResignActive
applicationDidEnterBackground --- app從前景到背景
applicationWillTerminate
didFinishLaunchingWithOptions
didFinishLaunchingWithOptions這個callback是整個app啟動時,執行的第一個function。我們可以在這裡去跟server拉資料更新使用者狀態或更新檔......等。
applicationDidEnterBackground這個callback是在使用者按下Home鍵回到手機首頁或叫起另一個app時,導致app退到背景,被系統呼叫執行到。這時我們應該要把一些需要儲存的狀態儲存起來,例如使用者目前在哪個階段或是已更改的資料
(p.s applicationDidEnterBackground應當和ViewController的viewWillDisappear有所區分,applicationDidEnterBackground儲存的狀態應該是不專屬於任何一個頁面,即Global的狀態,例如使用者登入狀態......等等)
applicationWillEnterForeground這個callback是在使用者重新打開app時,被系統呼叫執行到。這時我們應該根據存在UserDefaults或DB中的資料,決定app要到哪個頁面或更新UI或是否要更新資料。
ViewController的生命週期 (p.s 在每個ViewController中去控制)
在之前文章裡,我們有提到ViewController的生命週期:
init
loadView
viewDidLoad
viewWillAppear
viewDidAppear
viewWillDisappear
viewDidDisappear
viewWillUnload
viewDidUnload
dealloc
其中的兩個系統的callback(viewWillAppear & viewWillDisappear),
viewWillAppear : 當頁面重新顯示時,我們需要根據目前的狀態,去更新我們的UI
viewWillDisappear: 當頁面消失時(使用者按按鈕到下一頁或返回前一頁),使用者更新輸入資料或是選取某些選項,我們需要把這些更新後的狀態儲存起來(p.s 儲存在data model object or UserDefaults or DB)